import android

# Programma che mostra come realizzare semplici input e output
# usando i dialog. Vedere:
#  http://www.mithril.com.au/android/doc/UiFacade.html


def main():
  droid = android.Android()
  while 1:
    # crea un input dialog con un campo per l'inserimento del testo
    # e tre bottoni con label rispettivamente 2, 10, 16   
    droid.dialogCreateInput("Conversione di base", "Inserisci un numero e scegli la base in cui e' espresso")
    # si possono usare fino a tre bottoni i cui nomi sono Negative, Neutral, Positive
    # le seguenti istruzioni creano i bottoni indicando l'etichetta di ogni bottone
    droid.dialogSetNegativeButtonText('2')
    droid.dialogSetNeutralButtonText('10')
    droid.dialogSetPositiveButtonText('16')
    # visualizza il dialog e attende l'input dell'utente
    droid.dialogShow()
    # attende che venga premuto uno dei tre bottoni
    r =  droid.dialogGetResponse().result
    # legge la stringa rappresentante il numero e la base data dal bottone premuto
    tasto_premuto = r['which']
    stringa_input =  r['value']
    if tasto_premuto == 'negative':
      base_input = 2
    elif tasto_premuto == 'neutral':
      base_input = 10
    else:
      base_input = 16

    # crea nuovo dialog per leggere la base per l'output
    droid.dialogCreateAlert("Conversione di base", "Scegli la base in cui convertire")
    possibili_basi = [str(i) for i in range(2,17)]
    droid.dialogSetSingleChoiceItems(possibili_basi)  
    # mostra un unico bottone 
    droid.dialogSetPositiveButtonText('Questa!')
    # visualizza il dialogo e attende la risposta
    droid.dialogShow()
    droid.dialogGetResponse()
    # ottieni array con posizioni oggetti selezionati (nel nostro caso uno solo)
    risposta = droid.dialogGetSelectedItems().result
    # calcola la base dell'output: risposta[0] e' l'indice della riga selezionata
    base_output = risposta[0] + 2

    # esegue conversione e crea dialogo per visulizzare risultato
    try:
      stringa_output = cambia_base(stringa_input,base_input,base_output)  
      # --- mostra stringa convertita
      titolo = "Risultato conversione"     
      risultato = "(%s)_%d   =   (%s)_%d" % (stringa_input, base_input, stringa_output, base_output)
    except ValueError:
      titolo = "Impossibile eseguire conversione"
      risultato = "Stringa di input non valida"   
    droid.dialogCreateAlert(titolo,risultato)
    droid.dialogSetNegativeButtonText('Ancora')
    droid.dialogSetPositiveButtonText('Basta')
    droid.dialogShow()  
    r =  droid.dialogGetResponse().result
    # se e' stato premuto il tasto Basta esce dal ciclo e dal main
    if r['which']=='positive':
      break
    # se e' stato premuto il tasto Ancora rimaniamo nel while



# converte la stringa s in base b1 nella base b2 <= 16
def cambia_base(s,b1,b2):
  x = int(s,b1)
  cifre = "0123456789abcdef"
  ris = ""
  while x!=0:
    c = cifre[x%b2]
    ris = c+ris
    x = x/b2
  return ris


# esegui il main
main()
